package eu.catengine.common.iface;

import eu.catengine.common.listener.ScaleListener;
import eu.catengine.primitive.Point;
import eu.catengine.primitive.Size;

public interface ISizable
{
    /**
     * Zwraca wymiary obiektu.
     */
    public Size getSize();

    /**
     * Zwraca szerokość obiektu.
     */
    public float getWidth();

    /**
     * Zwraca wysokość obiektu.
     */
    public float getHeight();
    
    /**
     * Ustawia aktualną skalę jako początkową.
     */
    public void setActualScaleAsNormal();
    
    /**
     * Ustawia obiekt nasłuchujący dla skali obiektu.
     */
    public void setScaleListener(ScaleListener listener);
    
    /**
     * Skaluje obiekt o zadaną skalę względem punktu zaczepienia.
     */
    public void scaleBy(float scale);
    
    /**
     * Skaluje obiekt o zadaną skalę względem punktu zaczepienia.
     */
    public void scaleBy(float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt o zadaną skalę względem punktu.
     */
    public void scaleByAtPoint(Point point, float scale);
    
    /**
     * Skaluje obiekt o zadaną skalę względem punktu.
     */
    public void scaleByAtPoint(float x, float y, float scale);
    
    /**
     * Skaluje obiekt o zadaną skalę względem punktu.
     */
    public void scaleByAtPoint(Point point, float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt o zadaną skalę względem punktu.
     */
    public void scaleByAtPoint(float x, float y, float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt o zadaną skalę względem środka.
     */
    public void scaleByAtCenter(float scale);
    
    /**
     * Skaluje obiekt o zadaną skalę względem środka.
     */
    public void scaleByAtCenter(float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt do zadanej skali względem punktu zaczepienia.
     */
    public void scaleTo(float scale);
    
    /**
     * Skaluje obiekt do zadanej skali względem punktu zaczepienia.
     */
    public void scaleTo(float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt do zadanej skali względem podanego punktu.
     */
    public void scaleToAtPoint(Point point, float scale);
    
    /**
     * Skaluje obiekt do zadanej skali względem podanego punktu.
     */
    public void scaleToAtPoint(float x, float y, float scale);
    
    /**
     * Skaluje obiekt do zadanej skali względem podanego punktu.
     */
    public void scaleToAtPoint(Point point, float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt do zadanej skali względem podanego punktu.
     */
    public void scaleToAtPoint(float x, float y, float scaleX, float scaleY);
    
    /**
     * Skaluje obiekt do zadanej skali względem środka.
     */
    public void scaleToAtCenter(float scale);
    
    /**
     * Skaluje obiekt do zadanej skali względem środka.
     */
    public void scaleToAtCenter(float scaleX, float scaleY);
    
    /**
     * Zwraca skalę obiektu dla osi X.
     */
    public float getScaleX();

    /**
     * Zwraca skalę obiektu dla osi Y.
     */
    public float getScaleY();
}
